package com.ogawa.projectcommon.widget;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.Arrays;

import androidx.annotation.Nullable;

import com.ogawa.base.utils.ScreenUtils;
import com.ogawa.projectcommon.R;

import java.util.ArrayList;

public class DIYChartWidget extends FrameLayout {
    public DIYChartWidget(@NonNull Context context) {
        super(context);
    }

    public DIYChartWidget(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public DIYChartWidget(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
//    private int splitTime = 15;
//    private int splitcolumnCount = 4;
//    private Paint mRowLinePaint;  //横线、竖线的画笔
//    private Paint mColLinePaint;  //横线、竖线的画笔
//    private Paint mAxisTextPaint;  //轴线文字
//    private Paint mBeansPaint;  //柱子的绘制
//    private Paint mBeansTextPaint;  //柱子的文字绘制
//    private int mAxisTextSize = 12;
//    private int curTime = 0;
//    private int timeSelectColor = Color.parseColor("#3FC5FD");
//    private int timeUnSelectColor = Color.parseColor("#181818");
//    private ArrayList<DIYChartWidgetBean> diyChartWidgetBeans = new ArrayList<>();
//
//    Bitmap closeBitmap;
//    int tabLeftRightPadding = 0;
//    int tabTopBottomPadding = 0;
//    int startAxisTextX = 0;
//    int beanPadding = 0;
//
//    public DIYChartWidget(Context context) {
//        super(context);
//        init(null);
//    }
//
//    public DIYChartWidget(Context context, @Nullable AttributeSet attrs) {
//        super(context, attrs);
//        init(attrs);
//    }
//
//    public DIYChartWidget(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
//        super(context, attrs, defStyleAttr);
//        init(attrs);
//    }
//
//
//    private void init(AttributeSet attrs) {
//        closeBitmap = BitmapFactory.decodeResource(getContext().getResources(),
//                R.drawable.img_diy_chart_close);
//        setLayerType(LAYER_TYPE_SOFTWARE, null);
//        tabLeftRightPadding = ScreenUtils.dip2px(getContext(), 20);
//        tabTopBottomPadding = ScreenUtils.dip2px(getContext(), 3);
//        startAxisTextX = ScreenUtils.dip2px(getContext(), 10);
//        beanPadding = ScreenUtils.dip2px(getContext(), 2);
//
//        TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.diy_chart_widget);
//        if (attrs != null) {
//            try {
//                mAxisTextSize = a.getDimensionPixelSize(R.styleable.diy_chart_widget_axisTextSize,
//                        mAxisTextSize);
//                splitcolumnCount = a.getInt(R.styleable.diy_chart_widget_splitcolumnCount,
//                        splitcolumnCount);
//            } catch (Exception e) {
//                e.printStackTrace();
//            } finally {
//                {
//                    a.recycle();
//                }
//            }
//        }
//
//        setBackgroundColor(Color.WHITE);
//        mRowLinePaint = new Paint();
//        mRowLinePaint.setStrokeWidth(ScreenUtils.dip2px(getContext(), 1));
//        mRowLinePaint.setColor(Color.parseColor("#229F9F9F"));
//        mRowLinePaint.setPathEffect(new DashPathEffect(new float[]{15, 15}, 0));
//
//        mColLinePaint = new Paint();
//        mColLinePaint.setStrokeWidth(ScreenUtils.dip2px(getContext(), 1));
//        mColLinePaint.setColor(Color.parseColor("#229F9F9F"));
//        mColLinePaint.setPathEffect(new DashPathEffect(new float[]{15, 15}, 0));
//
//        mAxisTextPaint = new Paint();
//        mAxisTextPaint.setTextSize(ScreenUtils.sp2px(getContext(), mAxisTextSize));
//        mAxisTextPaint.setColor(Color.parseColor("#181818"));
//        mAxisTextPaint.setTextAlign(Paint.Align.CENTER);
//
//        mBeansPaint = new Paint();
//        mBeansPaint.setColor(Color.parseColor("#181818"));
//        mBeansPaint.setStyle(Paint.Style.FILL_AND_STROKE);
//
//        mBeansTextPaint = new Paint();
//        mBeansTextPaint.setColor(Color.WHITE);
//        mBeansTextPaint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD));
//        mBeansTextPaint.setFakeBoldText(true);
//        mBeansTextPaint.setTextAlign(Paint.Align.CENTER);
//
//        DIYChartWidgetBean diyChartWidgetBean0 = new DIYChartWidgetBean();
//        diyChartWidgetBean0.startTime = 0;
//        diyChartWidgetBean0.endTime = 1;
//        diyChartWidgetBean0.splitcolumnIndex = 0;
//        diyChartWidgetBean0.imageBgColor = Color.parseColor("#CC9AE7D2");
//        diyChartWidgetBean0.isShowCloseBt = true;
//        diyChartWidgetBean0.setOnCloseClickListener(new OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Log.e("tag", "点击了1");
//            }
//        });
//        diyChartWidgetBean0.setText("上背-腰部\n[敲击]");
//        diyChartWidgetBeans.add(diyChartWidgetBean0);
//
//        DIYChartWidgetBean diyChartWidgetBean1 = new DIYChartWidgetBean();
//        diyChartWidgetBean1.startTime = 3;
//        diyChartWidgetBean1.endTime = 15;
//        diyChartWidgetBean1.splitcolumnIndex = 1;
//        diyChartWidgetBean1.imageBgColor = Color.parseColor("#CCFEC0B7");
//        diyChartWidgetBean1.text = "小腿气压";
//        diyChartWidgetBeans.add(diyChartWidgetBean1);
//
//        DIYChartWidgetBean diyChartWidgetBean2 = new DIYChartWidgetBean();
//        diyChartWidgetBean2.startTime = 5;
//        diyChartWidgetBean2.endTime = 15;
//        diyChartWidgetBean2.splitcolumnIndex = 2;
//        diyChartWidgetBean2.imageBgColor = Color.parseColor("#CC9EB2F7");
//        diyChartWidgetBean2.text = "膝盖加热";
//        diyChartWidgetBeans.add(diyChartWidgetBean2);
//
//        DIYChartWidgetBean diyChartWidgetBean3 = new DIYChartWidgetBean();
//        diyChartWidgetBean3.startTime = 0;
//        diyChartWidgetBean3.endTime = 15;
//        diyChartWidgetBean3.splitcolumnIndex = 3;
//        diyChartWidgetBean3.isShowCloseBt = true;
//        diyChartWidgetBean3.setOnCloseClickListener(new OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Log.e("tag", "点击了2");
//            }
//        });
//        diyChartWidgetBean3.imageBgColor = Color.parseColor("#CCFBDB9D");
//        diyChartWidgetBean3.text = "脚底滚轮";
//        diyChartWidgetBeans.add(diyChartWidgetBean3);
//    }
//
//    public int getCurTime() {
//        return curTime;
//    }
//
//    public void setCurTime(int curTime) {
//        this.curTime = curTime;
//    }
//
//
//    @Override
//    protected void onDraw(Canvas canvas) {
//        super.onDraw(canvas);
//        drawTab(canvas);
//        drawBeans(canvas);
//    }
//
//    /**
//     * 如果View想处理事件，则view设置为clickable 或 复写 onTouchEvent(),return true;
//     */
//    @Override
//    public boolean onTouchEvent(MotionEvent event) {
//        //获取点击屏幕时的点的坐标
//        float x = event.getX();
//        float y = event.getY();
//        if (event.getAction() == MotionEvent.ACTION_UP){
//            whichCircle(x, y);
//        }
//
//        return true;//返回true，代表事件已经消费，事件已经终止。
//        // return false;  调用父类的onTouchEvent()
//        // return super.onTouchEvent(event);
//    }
//
//
//    /**
//     * 消费点击事件    根据点击事件确认是否点击了删除
//     *
//     * @param x
//     * @param y
//     */
//    private void whichCircle(float x, float y) {
////        Log.e("TAS", "" + x + ":" + y);
//        for (int i = 0; i < diyChartWidgetBeans.size(); i++) {
//            try {
//                DIYChartWidgetBean diyChartWidgetBean = diyChartWidgetBeans.get(i);
//                Rect closeRect = diyChartWidgetBean.getCloseRect();
//                if (closeRect != null) {
//                    if (
//                            x > closeRect.left && x < closeRect.right
//                                    &&
//                                    y > closeRect.top && y < closeRect.bottom
//                    ) {
//                        diyChartWidgetBean.getOnCloseClickListener().onClick(this);
//                        return;
//                    }
//                }
//
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//
//    public static Bitmap getBitmapFromView(View view) {
//        view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
//                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
//        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
//        view.buildDrawingCache();
//        Bitmap bitmap = view.getDrawingCache();
//        return bitmap;
//
//    }
//
//    private void drawBeans(Canvas canvas) {
//        int tabWidth = (int) (getMeasuredWidth() - tabLeftRightPadding * 2);
//        int tabHeight = (int) (getMeasuredHeight() - tabTopBottomPadding * 2);
//
//        int tabStartX = (int) (0 + tabLeftRightPadding);
//        int tabStartY = (int) (0 + tabTopBottomPadding);
//
//        int splitHeight = tabHeight / splitTime;
//        int splitWidth = tabWidth / splitcolumnCount;
//        for (int i = 0; i < diyChartWidgetBeans.size(); i++) {
//            DIYChartWidgetBean diyChartWidgetBean = diyChartWidgetBeans.get(i);
//
//
////            Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(),
////                    diyChartWidgetBean.getImageBgColor());
////            ImageView imageView = new ImageView(getContext());
////            imageView.setImageResource(diyChartWidgetBean.getImageBgColor());
////            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
////            View view = LayoutInflater.from(getContext()).inflate(R.layout.item_diy_bean,null);
////            Bitmap bitmap = getBitmapFromView(view);
////            int left = 0 + (diyChartWidgetBean.splitcolumnIndex)* splitWidth
////                    + beanPadding;
////            int right = left + splitWidth -beanPadding*2;
////
////            int top = tabStartY  + (diyChartWidgetBean.startTime)* splitHeight+beanPadding;
////            int bottom = top + splitHeight*(diyChartWidgetBean.endTime
////                    -diyChartWidgetBean.startTime) - beanPadding*2;
//            int left = tabStartX + (diyChartWidgetBean.splitcolumnIndex) * splitWidth
//                    + beanPadding;
//            int right = left + splitWidth - beanPadding * 2;
//
//            int top = tabStartY + (diyChartWidgetBean.startTime) * splitHeight + beanPadding;
//            int bottom = top + splitHeight * (diyChartWidgetBean.endTime
//                    - diyChartWidgetBean.startTime) - beanPadding * 2;
//
//
////            if( bitmap != null){
////                Rect dst = new Rect(left, top, right, bottom);
////                Rect src = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
////                canvas.drawBitmap(bitmap,src,dst,mBeansPaint);
////                int beanTextPadding = ScreenUtils.dip2px(getContext(), 3);
////                int tabItemWidth = right - left - beanTextPadding*2;
////                int tabItemHeight = bottom - top;
////                Rect mTextBound = new Rect();
////                mBeansTextPaint.setTextSize(ScreenUtils.sp2px(getContext(), diyChartWidgetBean.textSize));
////                mBeansTextPaint.getTextBounds(diyChartWidgetBean.text,0,diyChartWidgetBean.text.length(),mTextBound);
////                int stringWidth = (int) mBeansTextPaint.measureText(diyChartWidgetBean.text);
////                String[] strings = autoSplit(diyChartWidgetBean.text, mBeansTextPaint, tabItemWidth);
////                int x = left+ beanTextPadding + (stringWidth)/2;
////                int y = top + tabItemHeight/2;
////                for(String text : strings) {
////                    if (text != null){
////                        canvas.drawText(text, x, y, mBeansTextPaint);  //坐标以控件左上角为原点
////                    }
////                    y +=   mTextBound.height(); //添加字体行间距
////                }
////            }
//
//            mBeansPaint.setColor(diyChartWidgetBean.imageBgColor);
//            Path path = new Path();
//            path.moveTo(left, top);
//            path.quadTo(left + (right - left) / 2,
//                    top + ScreenUtils.dip2px(getContext(), 3), right, top);
//            path.lineTo(right, bottom - ScreenUtils.dip2px(getContext(), 7));
//            path.quadTo(left + (right - left) / 2, bottom, left,
//                    bottom - ScreenUtils.dip2px(getContext(), 7));
//            path.close();
//            canvas.drawPath(path, mBeansPaint);
//
//
//            int beanTextPadding = ScreenUtils.dip2px(getContext(), 3);
//            int tabItemWidth = right - left - beanTextPadding * 2;
//            int tabItemHeight = bottom - top;
//
//            TextPaint textPaint = new TextPaint();
//            textPaint.setColor(Color.WHITE);
//            textPaint.setTextSize(ScreenUtils.sp2px(getContext(), diyChartWidgetBean.textSize));
//            textPaint.setAntiAlias(true);
//            StaticLayout layoutopen = new StaticLayout(diyChartWidgetBean.text,
//                    textPaint, tabItemWidth, Layout.Alignment.ALIGN_CENTER,
//                    1.0F, 0.0F, true);
//            canvas.save();
//            Rect mTextBound = new Rect();
//            mBeansTextPaint.getTextBounds(diyChartWidgetBean.text,
//                    0, diyChartWidgetBean.text.length(), mTextBound);
//            canvas.translate(left + beanTextPadding,
//                    top + tabItemHeight / 2 - mTextBound.height() * 2 - beanTextPadding);
//            layoutopen.draw(canvas);
//            canvas.restore();
//
////            Rect mTextBound = new Rect();
////            mBeansTextPaint.setTextSize(ScreenUtils.sp2px(getContext(), diyChartWidgetBean.textSize));
////            mBeansTextPaint.getTextBounds(diyChartWidgetBean.text, 0, diyChartWidgetBean.text.length(), mTextBound);
////            int stringWidth = (int) mBeansTextPaint.measureText(diyChartWidgetBean.text);
////            String[] strings = autoSplit(diyChartWidgetBean.text, mBeansTextPaint, tabItemWidth);
////            int x = left + beanTextPadding + (stringWidth) / 2;
////            int y = top + tabItemHeight / 2;
////            for (String text : strings) {
////                if (text != null) {
////
////                    canvas.drawText(text, x, y, mBeansTextPaint);  //坐标以控件左上角为原点
////                }
////                y += mTextBound.height(); //添加字体行间距
////            }
//
//
//            if (diyChartWidgetBean.isShowCloseBt) {
//                Rect closeRect = diyChartWidgetBean.getCloseRect();
//                int bitWidth = ScreenUtils.dip2px(getContext(), 15);
//                closeRect.left = right - bitWidth / 2;
//                closeRect.top = top - bitWidth/4;
//                closeRect.right = right + bitWidth / 2;
//                closeRect.bottom = top + bitWidth-bitWidth/4;
//
//                Rect src = new Rect(0, 0, closeBitmap.getWidth(), closeBitmap.getHeight());
//                canvas.drawBitmap(closeBitmap, src, closeRect, mBeansPaint);
//            }
//
//        }
//
//
//    }
//
////    private String[] autoSplit2(String content, Paint p, float width){
////        int length = content.length();
////        float textWidth = p.measureText(content);
////        if(textWidth <= width) {
////            return new String[]{content};
////        }
////        if()
////
////    }
//
//    /**
//     * 自动分割文本
//     *
//     * @param content 需要分割的文本
//     * @param p       画笔，用来根据字体测量文本的宽度
//     * @param width   最大的可显示像素（一般为控件的宽度）
//     * @return 一个字符串数组，保存每行的文本
//     */
//    private String[] autoSplit(String content, Paint p, float width) {
//        int length = content.length();
//        float textWidth = p.measureText(content);
//        if (textWidth <= width) {
//            return new String[]{content};
//        }
//        int start = 0, end = 1, i = 0;
//        int splitCount = 0;
//        for (int j = 0; j < content.length(); j++) {
//            char i1 = content.charAt(j);
//            if (i1 == '\n') {
//                splitCount += 1;
//            }
//        }
//        int lines = (int) Math.ceil(textWidth / width); //计算行数
//        String[] lineTexts = new String[lines + splitCount];
//        while (start < length) {
//            if (p.measureText(content, start, end) > width) { //文本宽度超出控件宽度时
//                lineTexts[i++] = (String) content.subSequence(start, end);
//                start = end;
//            }
//            if (end == length) { //不足一行的文本
//                lineTexts[i] = (String) content.subSequence(start, end);
//                break;
//            }
//            end += 1;
//        }
//        return lineTexts;
//    }
//
//    private void drawTab(Canvas canvas) {
//
//        int tabWidth = (int) (getMeasuredWidth() - tabLeftRightPadding * 2);
//        int tabHeight = (int) (getMeasuredHeight() - tabTopBottomPadding * 2);
//
//        int tabStartX = (int) (0 + tabLeftRightPadding);
//        int tabStartY = (int) (0 + tabTopBottomPadding);
//        int endTabX = tabStartX + tabWidth;
//        int endTabY = tabStartY + tabHeight;
//        int tabSplitHeight = tabHeight / splitTime;
//        int tabSplitWidth = tabWidth / splitcolumnCount;
//        for (int i = 0; i < splitTime; i++) {
//            //绘制横线
//            int y = (i) * tabSplitHeight + tabStartY;
//            if (i != 0) {
//                canvas.drawLine(tabStartX, y, endTabX, y, mRowLinePaint);
//            }
//
//
//            if (curTime == i) {
//                mAxisTextPaint.setColor(timeSelectColor);
//            } else {
//                mAxisTextPaint.setColor(timeUnSelectColor);
//            }
//            String text = "" + (i + 1) + "‘";
//            float measureText = mAxisTextPaint.measureText(text);
//            int textY = y + tabSplitHeight / 2;
//
//            canvas.drawText(text,
//                    0 + startAxisTextX, textY, mAxisTextPaint);
//
//        }
//
//        //绘制竖线
//        for (int i = 0; i < splitcolumnCount - 1; i++) {
//            int x = tabStartX + (i + 1) * tabSplitWidth;
//            canvas.drawLine(x, tabStartY, x, endTabY, mColLinePaint);
//        }
//    }
//
//
//    public class DIYChartWidgetBean {
//        //属于第几个柱子上的
//        private int splitcolumnIndex;
//        //背景
//        private int imageBgColor;
//        //开始时间
//        private int startTime;
//        //结束时间
//        private int endTime;
//        //文字
//        private String text;
//        //文字大小
//        private int textSize = 12;
//        //是否显示关闭按键
//        private boolean isShowCloseBt = false;
//        //关闭按键的点击事件
//        private View.OnClickListener onCloseClickListener;
//        //关闭按键的区域
//        private Rect closeRect = new Rect();
//
//
//        public boolean isShowCloseBt() {
//            return isShowCloseBt;
//        }
//
//        public void setShowCloseBt(boolean showCloseBt) {
//            isShowCloseBt = showCloseBt;
//        }
//
//        public OnClickListener getOnCloseClickListener() {
//            return onCloseClickListener;
//        }
//
//        public void setOnCloseClickListener(OnClickListener onCloseClickListener) {
//            this.onCloseClickListener = onCloseClickListener;
//        }
//
//        public Rect getCloseRect() {
//            return closeRect;
//        }
//
//        public void setCloseRect(Rect closeRect) {
//            this.closeRect = closeRect;
//        }
//
//        public int getSplitcolumnIndex() {
//            return splitcolumnIndex;
//        }
//
//        public void setSplitcolumnIndex(int splitcolumnIndex) {
//            this.splitcolumnIndex = splitcolumnIndex;
//        }
//
//        public int getImageBgColor() {
//            return imageBgColor;
//        }
//
//        public void setImageBgColor(int imageBgColor) {
//            this.imageBgColor = imageBgColor;
//        }
//
//        public int getStartTime() {
//            return startTime;
//        }
//
//        public void setStartTime(int startTime) {
//            this.startTime = startTime;
//        }
//
//        public int getEndTime() {
//            return endTime;
//        }
//
//        public void setEndTime(int endTime) {
//            this.endTime = endTime;
//        }
//
//        public String getText() {
//            return text;
//        }
//
//        public void setText(String text) {
//            this.text = text;
//        }
//
//        public int getTextSize() {
//            return textSize;
//        }
//
//        public void setTextSize(int textSize) {
//            this.textSize = textSize;
//        }
//    }

}
